import http from './http';

export const chatApi = {
  /**
   * 按游标分页查询对话历史
   * @param {number|string} chatId 对话ID
   * @param {number} pageSize 页面大小，默认10
   * @param {string} lastCreateTime 上一页最后一条记录的创建时间（与后端一致的原始格式：YYYY-MM-DD HH:mm:ss）
   * @returns {Promise<{records:any[], hasMore:boolean, lastCreateTime:string|null}>}
   */
  async listChatHistory(chatId, pageSize = 10, lastCreateTime) {
    const params = new URLSearchParams();
    if (pageSize) params.set('pageSize', String(pageSize));
    if (lastCreateTime) params.set('lastCreateTime', lastCreateTime);
    const url = `/chat/history/${chatId}?${params.toString()}`;
    const res = await http.get(url);
    if (res.data?.code !== 0) {
      throw new Error(res.data?.message || '加载聊天历史失败');
    }
    const page = res.data.data || {};
    const records = page.records || [];
    // 约定：后端 Page 结构里，最后一条记录的创建时间可通过记录本身的 createTime 获取
    const last = records.length > 0 ? records[records.length - 1] : null;
    return {
      records,
      hasMore: page.hasNext || (page.total && page.current && page.pages ? page.current < page.pages : records.length === pageSize),
      lastCreateTime: last ? last.createTime : null
    };
  },

  /**
   * 获取用户所有会话的预览（每个会话取最早一条消息）用于侧边栏展示
   * 会话历史列表按照每组会话中最早的创建时间降序排序（8.27 -> 8.26 -> 8.25）
   * 后端返回 Map<Long, List<ChatHistory>>，这里转换为数组 [{ chatId, message, createTime }]
   * @param {number|string} userId 用户ID
   * @returns {Promise<Array<{chatId:number, message:string, createTime?:string}>>}
   */
  async listConversationPreviews(userId) {
    const url = `/chat/history/earliest/${userId}`;
    const res = await http.get(url);
    if (res.data?.code !== 0) {
      throw new Error(res.data?.message || '加载会话预览失败');
    }
    const data = res.data?.data || {};
    const result = [];
    // data 形如 { "123": [ { id, message, createTime, ... } ] }
    for (const key in data) {
      if (!Object.prototype.hasOwnProperty.call(data, key)) continue;
      const list = Array.isArray(data[key]) ? data[key] : [];
      const first = list.length > 0 ? list[0] : null;
      if (!first) continue;
      result.push({ chatId: key, message: first.message || '', createTime: first.createTime });
    }
    return result;
  },

  
  /**
   * 根据对话ID删除对话历史记录（逻辑删除）
   * @param {number|string} chatId 对话ID
   * @returns {Promise<boolean>} 是否成功删除
   */
  async deleteChatHistory(chatId) {
    const url = `/chat/history/delete/${chatId}`;
    const res = await http.post(url);
    if (res.data?.code !== 0) {
      throw new Error(res.data?.message || '删除对话历史失败');
    }
    return res.data.data === true;
  }
};


